%                        /!\    50 pages sans annexe       /!\
\documentclass [a4paper,12pt] {article} 	% type de document
\usepackage [french] {babel} 		% langue utilisée
\usepackage [utf8] {inputenc} 		% permet d'utiliser les accents
\usepackage {enumerate}			% permet de créer des listes
\usepackage {fancyhdr}			% package permettant de faciliter les en-têtes de pages
\usepackage {graphicx}			% permet l'insertion d'images
\usepackage {eurosym}			%permet signe euro
\usepackage[colorlinks=true]{hyperref}  	%permet lien hypertexte
\usepackage{float}

\hypersetup{urlcolor=blue,linkcolor=black,citecolor=black,colorlinks=true} %menu hypertexte

%page de présentation
\title {Rapport de soutenance \no4} 

\author {Alexandre Taupiac  \\
 Aurélien Baud \\
 David Renaudin \\
 Nicolas Meny }
\date {}
\begin {document}
\setcounter{page}{0}

\begin {figure}[!t]
    \center
	\includegraphics[scale=0.8]{rapport.png}
\end {figure}
\maketitle
\thispagestyle{empty}

%en-tete
\pagestyle{fancy}
\fancyhead[L] {\emph{Brawl Ultra Guns}}
\rhead[\emph{\textit{Brawl Ultra Guns}}]{\emph{\nouppercase{\leftmark}}}

%%pied de page
\cfoot{\thepage} %numero de page
\clearpage

%table des matieres
\tableofcontents
\clearpage
%table des figures
\listoffigures 
\clearpage
%debut rapport
\section {Introduction}

Nous voici donc arrivés à la fin de cette superbe première année mais également aussi à la fin et à la concrétisation de notre projet d'informatique ! C'est ici que nous allons pouvoir vous présenter les fruits de notre dur labeur, de notre imagination ! Cela fait quelque chose tout de même d'avoir enfin notre propre jeu entièrement construit de nos mains, imaginé, codé ! Nous sommes fiers du jeu que nous vous présenterons lors de cette dernière soutenance ! \\

Rappelons pour une dernière petite fois le contexte historique de notre jeu : un petit programme nommé Si'sharp est chargé par ses concepteurs de libérer le monde de l'oppression d'un programme maléfique nommé Van'Hithas qui a pris le contrôle de tout grâce à des BUG qu'il a créé lui-même. Pour l'aider dans sa quête il possèdera des armes qui lui permettront de détruire ces BUG. \\

Le jeu étant également basé sur un amusement à plusieurs, il bénéficie d'un mode multijoueur permettant à des joueurs de s'affronter en face à face. \\

Pour cette soutenance nous avons donc apporté les dernières petites modifications (même si elles étaient nombreuses et pas si petites que ça finallement) qui vous seront présentées dans la suite de ce rapport. Gardons un peu de suspense, ne dévoilons pas tout dès maintenant, chaque chose en son temps ! \\

Depuis le début nous sommes restés une équipe soudée et unie devant les difficultés, partageant nos joies et nos peines pour avancer tous ensemble vers notre but, à savoir cette soutenance ! \\

Nous espérons que vous prendrez plaisir à lire ce rapport et à écouter notre soutenance ! \\

Bonne lecture !! 
 
\clearpage

%Description
\section {Description complète du jeu}
\subsection{Origine du projet}

Voici le point de commencement d'une aventure d'une année, à peine le groupe formé la question du type de projet qu'on allait faire était déjà réglée, nous allions coder un jeu vidéo. Pourquoi un tel choix ? Car la nature des projets, les années suivantes, à EPITA nous sera imposée. De plus nous nous aurions mal vu coder une application pour le moment, car nous n'avons, pour la plupart, aucune expérience en programmation.
\\

Après ce premier choix, nous devions décider du type de jeu. Tout d'abord nous voulions un jeu dans l'optique d'un multijoueur pour se sentir tous concernés, car nous pourrions tous y jouer ensemble à la fin, et donc au final avoir déjà dans l'esprit une optique de "groupe". C'est donc pour ça qu'on s'est tourné vers un genre de jeu de combat en mêlée, où les joueurs seront dotés d'armes.
Cependant il nous fallait un mode un joueur, ce qui nous a orienté vers un Mario-like.

\subsection{Histoire du jeu}

Après plusieurs années de recherches dans le domaine des langages informatiques de nombreux ingénieurs se rendirent compte qu'un seul langage était le plus puissant, le plus performant de tous, celui-ci était le OKa'mel. Tous les ingénieurs de la planète entreprirent un travail monstrueux en recodant tous les logiciels en OKa'mel.
\\

Cependant ces derniers se basaient sur un compilateur des plus hasardeux qui a engendré un programme doté d'une intelligence supérieure à celle des hommes, nommé Van'Hithas, qui prit le contrôle des systèmes informatiques de la planète grâce à des BUG créés par lui-même. Les hommes eurent l'obligation de s'exiler en dehors des villes construites par eux-mêmes qui étaient sous le contrôle total de Van'Hithas. Cependant une résistance se forma du coté des humains pour lutter contre ces BUG, ils créèrent à partir d'un vieux terminal, un programme lui aussi doté d'une IA, Si'sharp qui allait lutter contre ce fléau.

\subsection{Description détaillée du jeu}
\subsubsection{Le déroulement d'une partie}

Comme vous l'avez donc certainement compris, le but de notre petit héros est de défaire ce maléfique et terrifiant programme qu'est Van'Hithas. Le joueur incarne ce héros dans plusieurs niveaux qu'il devra traverser pour se frayer un chemin jusqu'au boss final. Au fur et à mesure de sa progression le joueur rencontrera une difficulté croissante. En effet des monstres de plus en plus puissants se présentent avec les niveaux parcourus et il faudra parfois jouer habilement de la souris pour passer sans encombre. \\

 Les niveaux sont composés de différents éléments, à savoir des blocs pour se déplacer dans les airs si on peut dire, des monstres en tout genre et parfois même des pics (aïe ça fait mal) et des trappes (gardez vous d'y tomber). Suivant les niveaux, leurs emplacements, nombres et autres varient. Une fois arrivé dans le niveau, le but du joueur sera donc d'éliminer tous les monstres pour ainsi accéder au niveau suivant. Mais il ne faut pas croire que c'est une partie de plaisir (ça serait tout de suite moins drôle sinon). En effet le joueur ne possède qu'un nombre limité de munitions et les ennemis ne restent bien entendu pas passifs, ils tirent, bougent, bref chercheront à vous éliminer à tout prix ! Au cours de sa progression dans le niveau en cours, pour l'aider, le joueur pourra tout de même compter sur la chute aléatoire d'objets sur le terrain, à savoir de la vie, des munitions ou de nouvelles armes. \\

Arrivons maintenant à la fin du niveau, il ne reste que vous et un monstre (ou plusieurs ça on ne sait pas si vous savez bien jouer ou pas à vrai dire), 2 solutions s'offrent à vous. Premièrement vous êtes un dieu, vous arrivez à vous imposer, les monstres meurent les uns après les autres jusqu'à leur disparition totale de la carte et vous avez gagné ou alors vous vous emmélez les pinceaux, vous vous faites canarder de partout jusqu'à finalement mourir dans une grande douleur en voyant s'afficher à l'écran un joli message vous informant que vous avez perdu, auquel cas il vous faudra recommencer le niveau ou quitter en jetant votre machine par la fenêtre sous l'effet de la rage.\\

Il existe également un autre mode dans lequel le joueur ne peut pas gagner (étrange me direz vous) : le mode Survival.
Dans ce type de partie, il n'y a pas de fin heureuse pour notre personnage puisque le seul moyen de "finir'' ce niveau est de mourir. Cependant, le but de ce mode n'est pas de réussir à terminer un niveau (contrairement aux autres), le but ici est seulement de tenter de tuer un maximum d'ennemis en survivant le plus longtemps possible. En effet, dans ce mode de jeu, les ennemis apparaissent en continu toutes les quelques secondes et ceci sans aucune limite.
Dans ce type de partie, le joueur peut à tout moment visualiser son score actuel (le nombre d'ennemis tués ainsi que le temps depuis lequel il a commencé) en appuyant sur la touche TAB.
A la fin du niveau (ou plutôt à la mort du personnage), le joueur verra ce score affiché avant de pouvoir revenir au menu principal. Grâce à ce mode de jeu, le joueur ne peut donc pas se lasser puisqu'il n'y a pas de fin, il finira forcément par mourir mais il peut toujours essayer d'obtenir le meilleur score possible.

\subsubsection{Multijoueur}

Disponible à partir du menu, le mode multijoueur vous permettra d'assister à des batailles entre 2 joueurs en réseau. Celui ci est également l'occasion de partager les cartes créées via l'éditeur, puisque l'hébergeur pourra choisir la carte qu'il souhaite pour jouer et celle ci sera automatiquement partagée avec le joueur qui rejoindra la partie, permettant ainsi de renouveler les parties multijoueur à  l'infini.

\paragraph{Lancement d'une partie\\}

Au démarrage, 2 choix se présenteront à vous, vous pouvez héberger une nouvelle partie ou bien en rejoindre une déjà créée.\\

Si vous choisissez d'héberger la partie, un nom de niveau vous sera demandé afin de savoir sur quelle carte vous souhaitez jouer. Celle ci doit au préalable avoir été sauvegardée sur l'ordinateur sinon vous recevrez un message vous informant que celle ci n'est pas présente. Une fois ceci fait, le serveur sera démarré et vous aurez alors à attendre la connexion d'un joueur.\\

Si vous choisissez de rejoindre une partie, celle ci devra au préalable avoir été créée par l'hébergeur afin que le serveur soit lancé. Une adresse IP vous sera alors demandée. Pour cela, il faudra demander à l'hébergeur de vous fournir l'adresse du serveur qui correspond à la seconde ligne de la console.La partie débutera alors.

\paragraph{Déroulement d'une partie\\}

Le déroulement de la partie est, à peu de choses près, le même que dans le mode Histoire, à la différence bien sûr que l'adversaire que vous aurez à affronter sera un joueur et non une IA classique. Une des seules différences notables est la présence d'un nombre de vies. En effet, la partie ne se terminera pas dès la mort d'un des joueurs, mais plutôt dès que l'un d'entre eux aura écoulé son stock de vie, c'est à dire que vous pourrez mourir autant de fois que vous aurez de vies avant de perdre la partie. Cependant n'oubliez pas qu'il en sera de même pour votre adversaire ! Vous pourrez consulter à tout moment votre nombre de vies en comptant les coeurs affichés en haut à gauche de l'écran.

\subsubsection{Les méchants}%mob fullpower, description détaillé

Dans chacun des niveaux notre petit héros devra affronter des monstres qui comme vous le savez se prénomment des "bug". Le programme maléfique Van'Hithas en a créés de plusieurs types pour vous barrer la route !

\paragraph{Le dénommé Rouge\\}

Ce monstre est le tout premier créé par Van'Hithas. C'est d'ailleur sur son model que les ingénieurs ont copié Si'sharp. Celui ci possède donc une arme comme celle que notre héros dispose de base. Rouge va donc chercher à vous détruire en vous tirant dessus, sachez que ses munitions sont illimitées alors il ne vous servira à rien de vous cacher en attendant qu'il se calme.

\paragraph{Le dénommé Vert\\}

C'est le deuxième "bug" créé par Van'Hithas. Celui ci n'a plus rien à voir avec Rouge, il est plus puissant et bien plus vicieux ! En effet comme vous avez pu le remarquer il ne possède pas d'arme. Il a l'air tout mignon et tout gentil avec son air entièrement vert hérissé mais ce n'est qu'une façade pour dissimuler son vrai pouvoir. Si vous vous approchez trop près de lui, celui ci se fera un plaisir de vous retirer votre santé à l'aide de ses pics. Sachez rester loin de lui si vous voulez demeurer vivant tout au long du niveau !     

\paragraph{Le boss : Van'Hithas\\}

Et le voici le vrai, l'unique, le grand Van'Hithas ! Le programme que tout le monde sur cette planète craint et qu'il faut à tout prix anéantir. Au niveau de sa forme il reste très proche des "bug" et de notre héros mais il est reconnaissable à sa couleur violette et aux cornes qu'il a sur la tête. C'est une forme maléfique de notre héros, bien plus gros et plus imposant que lui pourtant et il faudra user de toute votre habileté pour le vaincre. Les détails de ce monstres vous seront donnés dans la suite du rapport. 

\begin{figure}[!h]
    \center
    \includegraphics[width=2cm]{boss.png}
    \caption{Van'Hithas}
\end{figure}

\subsubsection{Informations à l'écran}%toutes les info sur l'ecran, arme, vie, etc


\paragraph{Dans le mode Histoire et le mode multijoueur\\}
Au cours d'un partie le joueur verra sur son écran de nombreuses informations utiles à sa progression ou à son approche du niveau. \\

Tout d'abord, et c'est important de le citer, le joueur verra...le héros ! et oui c'est un fait si il ne le voyait pas sa tâche serait difficile à accomplir. Avec lui s'affiche également les différents types de monstres et de décors tels que les blocs, les pics, le fond, ... \\
La vie du personnage et de ses ennemis est bien sûr affichée à l'écran sous la forme d'une barre de vie au dessus de la tête qui change de couleur suivant le pourcentage de santé restant. Sur cette barre ont peut apercevoir le nombre de munitions restant dans l'arme qu vous tenez entre vos mains, ainsi vous pouvez savoir si vous avez le droit de vous acharner sur la souris comme un fou ou si au contraire il vous faudra jouer d'habileté pour réussir à vaincre tout le monde sans tomber à court de munitions avant l'heure. Parfois le joueur pourra également apercevoir des objets tombant du ciel qu'il pourra ramasser pour récuperer des armes, des munitions ou de la santé. \\

\begin{figure}[!h]
    \center
    \includegraphics[width=13cm]{info.png}
    \caption{Les éléments affichés à l'écran}
\end{figure}

Si le joueur arrive à vaincre tous les monstres alors un message lui signalant qu'il a gagné apparaitra à l'écran. Il en est de même si il perd (sauf que cette fois ça sera un message de défaite qui s'affichera). 

\paragraph{Dans l'éditeur\\}
Lorsque le joueur sera dans l'édieur, au cours de la construction de sa carte, dans le coin supérieur gauche, il apercevra les instructions pour éditer la carte de ses rèves. Ainsi on peut lire ce que ça fait si on fait un clic droit ou un clic gauche, les différentes touches à appuyer pour choisir tel ou tel décor. Une fois que la carte convient au joueur il pourra la sauvegarder, faisant ainsi passer la rubrique "sauvegarde" à vrai. Il lui sera ensuite possible de le charger à l'aide d'un menu prévu à cette effet (pour l'explication plus précise voir la suite de ce rapport) et d'y jouer dans le mode multijoueur.

\begin{figure}[!h]
    \center
    \includegraphics[width=13cm]{info_editeur.png}
    \caption{Les informations sur l'éditeur}
\end{figure}


\subsection{Description détaillée de l'éditeur}%detaille bien avec screen, ce qu'on peut faire, detaille en subsubsection

L'éditeur est un des éléments clés pour les joueurs afin de s'amuser un maximum en multijoueur. Il possède une interface très simple puisque l'utilisateur voit directement le niveau qu'il crée et peut intéragir avec.

\subsubsection{Les éléments modifiables}

Dans notre éditeur, le joueur peut facilement décider des différents éléments du jeu qui controleront un niveau, il peut ainsi rajouter tous les éléments de décor à n'importe quel position.
Le joueur choisit tout d'abord le décor qu'il souhaite placer grâce aux touches numérotées du clavier. Cet élément s'affiche à l'emplacement de la souris du joueur et il peut ensuite décider de faire un clic gauche afin de fixer ce décor ou un clic droit afin d'effacer tous les décors se trouvant à l'emplacement de la souris.\\
Le joueur peut ainsi décider précisement (au pixel près) la position de chacun des éléments du décor.\\

De plus le joueur peut également placer un décor spécial puisqu'il ne s'agit pas d'un décor en jeu : il s'agit du personnage ou plutôt de sa position initiale dans le jeu en multijoueur. Bien sûr si le personnage a déjà été placé, le joueur ne peut pas en placer un nouveau tant que l'ancien est toujours présent (il serait bizarre que le joueur ait 2 positions différentes initiales). De plus, afin d'éviter de bloquer le joueur en jeu, le personnage ne peut pas être placé à un endroit où il rentrerait immédiatement en collision avec un élément du décor.

Enfin, pour des questions de design, le joueur peut choisir le fond d'écran qu'il souhaite pour son niveau à l'aide des flèches directionelles du clavier.

\subsubsection{La gestion des niveaux}

\paragraph{La sauvegarde\\}
Afin de rendre les niveaux accessibles, le joueur peut bien évidemment sauvegarder le niveau qu'il a créé. Pour cela, il suffit de se rendre dans le menu de l'éditeur (touche echap) puis de cliquer sur le bouton sauvegarder. Le joueur aura alors la possibilité de choisir un nom pour son niveau puis lorsqu'il appuiera sur entrée pour confirmer son choix, le niveau corespondant à l'éditeur actuel sera sauvegardé dans un fichier. Le joueur aura alors la possibilité de jouer avec en multijoueur.

\paragraph{Le chargement\\}
De plus, le joueur peut décider de charger un niveau déjà existant afin de l'éditer. En choisissant l'option charger, se trouvant également dans le menu de l'editeur, le joueur aura alors la possibilité de rentrer un nom de niveau qu'il souhaite charger et, si ce niveau existe bel et bien, il se chargera dans l'éditeur comme si le joueur avait placé chaque décor un à un. De cette manière, le joueur n'est pas obligé de recréer entierement un niveau qu'il avait déjà créé s'il veut seulement ajouter un petit élément de décor.

\subsection{Choix du langage et des bibliothèques}
\subsubsection{C\#}
Pour notre projet, nous avions le choix entre coder en OCaml ou en C\# : l'OCaml étant l'implémentation la plus avancée du langage de programmation Caml, créé par Xavier Leroy, Jérôme Vouillon, Damien Doligez, Didier Rémy et leurs collaborateurs en 1996, et le C\# étant un langage de programmation orienté objet, créé par la société Microsoft.
\\

Nous avons décidé d'utiliser le C\# car étant créé par la société Microsoft, nous pensons que ce langage s'adaptera plus facilement sur Windows, plateforme sous laquelle notre jeu devra fonctionner.

\subsubsection{XNA}
De plus nous avons décidé d'utiliser XNA, une série d'outils fournis gratuitement par Microsoft qui facilite les développements de jeux. Nous avons fait ce choix tout d'abord car les groupes de projet de l'année dernière ne nous en ont dit que du bien, ensuite car cela nous permettra d'intégrer plus facilement l'utilisation des manettes de Xbox 360. De plus XNA étant utilisé pour faciliter les développements de jeux vidéo, il serait dommage de s'en priver pour créer un jeux video.

\subsubsection{System.Net}
Nous sommes restés sur les bibliothèques \emph{System.Net} et  \emph{System.Net.Socket} intégrées au .NET Framework 3.1. Ces bibliothèques sont assez documentées et gèrent assez bien les protocoles utilisés de nos jours. De plus les sockets sont un point important de communication au sein d\rq{}une même machine permettant à des processes d\rq{}échanger des informations.

\clearpage
%Organisation du groupe
\section{Organisation du groupe}
\subsection{Répartition du travail et planning}

\subsubsection{Rappel de la répartition du travail}
La répartition des tâches s'est effectuée sous forme de binômes pour un meilleur dynamisne au niveau du travail, de plus dans le cas où une personne serait bloquée cela permettrait une entraide au sein du groupe. Ce système nous a permis de faire avancer les parties plus rapidement par rapport aux connaissances de chacun ce qui poussait le groupe à aller toujours plus loin.
\\   

\begin {tabular} {| l | c | c | c | c |}
	\hline
	Tache attribuée			& Alexandre 	& Aurélien 	& David 	& Nicolas 	\\ \hline \hline
	Interface et moteur de jeu 	&  		& X 		&  		& X 		\\ \hline
	Moteur réseau 		& 		& 		& X 		& X 		\\ \hline
	Moteur graphique 		& X 		& X 		& 		& 		\\ \hline
	Moteur sonore			& X 		& 		& X 		& 		\\ \hline
	Site web 			& X 		& X 		& 		& 		\\ \hline
	Intelligence Artificielle 				& 		& 		& X 		& X 		\\ \hline

\end {tabular}
\subsubsection{Planning des soutenances}

\begin {tabular} {| l | c | c | c | c |}
	\hline
	Tache atribuée			& Première 	& Deuxième  	& Troisième  	& Finale  	\\ \hline \hline
	Interface et moteur de jeu 	&  	30\%	& 50\%	&  		& 100\%	\\ \hline
	Moteur réseau 		& 	15\%	& 	40\%	&  70\%	& 100\%	\\ \hline
	Moteur graphique 		& 30\%	& 50\%	& 		& 	100\%	\\ \hline
	Moteur sonore			& 20\%	& 		& 100\%	& 	100\%	\\ \hline
	Site web 			& 60\%	& 80\%	& 	90\%	& 	100\%	\\ \hline
	Intelligence Artificielle 				& 	0\%	& 	20\%	& 60\%	& 100\%	\\ \hline
\end {tabular}
\\\\\\
Durant tout le projet, nous avons toujours été dans les temps au niveau des pronostics. Cependant nous avons quelques fois constatés des avances notamment pour chaque soutenances :\\

\begin {itemize}
\item Soutenance 1 : Collision.
\item Soutenance 2 : Gestion de la vie, tir opérationel, tchat.
\item Soutenance 3 :  Déplacement de l'arme en multijoueur.
\item Soutenance 4 : Partage de la carte en multijoueur, ajout d'une vidéo de dénouement et de crédits, gestion des commandes, mode survie, passage du site Web en PHP.
\end{itemize}

\subsection{Planning}
\subsubsection{Organisation officielle}
La plannification de réunions de projet, pour pouvoir développer des idées et avancer ensemble dans le code, n'est pas chose facile. Il faut pouvoir contenter chaque personne au niveau des disponibilités horaires. Cependant dans notre groupe nous avons toujours été disponibles la semaine précédant chaque soutenance. Ces réunions ont donc été faciles à être placées.
Pour résumer, comme dit plus haut, nos réunions ont toujours été organisées la semaine précédant nos soutenances. Chacun pouvait venir à l'heure désirée, mais nous avions la présence de tout le monde à partir de 11h jusqu'à ce que le travail soit terminé.\\

Ormis pour la dernière soutenance, le rythme a été plus soutenu à cause de la pause qu'on s'était accordé entre la soutenance 3 et les partiels, révisions et temps pour souffler ont été prioritaires. Le travail a repris juste après les partiels pour continuer intensément jusqu'à la date finale. \\

Les réunions, alias les rushs, n'étaient bien entendu pas les seules périodes de travail du projet, nous fournissions tous à coté un travail régulier pour pouvoir avancer rapidement, et pouvoir être dans nos pronostics et même en avance sur certains points.

\subsubsection{Lieu de travail}
Le lieu de travail a été determiné par deux facteurs importants : \\
\begin{itemize}
\item L'accessibilité du lieu par les moyens de transport, Nicolas et Aurélien ont été élimié d'office, ne reste plus qu'EPITA, chez David et Alexandre.
\item La qualitité de la connexion internet : point important pour utiliser SVN pour partager notre travail, David fut éliminé directement, et EPITA aussi pour la réputation de sa wifi. \\
\end{itemize}
Finalement nous avons passé toutes nos réunions chez Alexandre, pour le grand malheur de ses factures d'électricités, que toute l'équipe remercie.

\subsection{Partage et propagation du code}
Un projet nécessite une plateforme de synchronisation accessible à n'importe quel moment, nous avons opté pour un logiciel de gestion de version.\\

TortoiseSVN gère des fichiers et des répertoires à travers le temps. Les fichiers sont stockés dans un serveur central qui se rappelle chaque changement fait de nos fichiers et répertoires. Cela nous a permis de récupérer les versions précédentes de nos fichiers et d'examiner l'historique de comment et quand nos données ont changé.

\begin{figure}[!h]
    \center
    \includegraphics[width=14cm]{svn.png}
    \caption{Tortoise SVN}
\end{figure}

\subsection{Méthodes de travail} %rush, reunion, (detaille en subsub pour chaque présoutenance)

Tout au long de l'élaboration  de notre projet, même dès le début, il a fallu réfléchir sur la manière dont nous allions nous organiser dans notre travail pour être productifs et efficaces. Outre le fait que nous utilisons un SVN pour avoir accès facilement et en temps presque réel au travail de chacun, à l'approche des soutenances ou lorsque nous étions confrontés à une étape importante sur le jeu, nous avons dû nous adapter en circonstance pour résoudre les problèmes ou arriver à un résultat concluant.

\subsubsection{La première soutenance}

Dans les premiers pas de notre projet nous avons beaucoup travaillé suivant notre organisation en binômes en nous retrouvant parfois à l'école pour savoir où l'autre en était rendu, etc. En effet nous n'avons pas directement mis en place notre SVN. Ensuite la première soutenance approchait. Pour être vraiment prêt nous nous sommes tous concertés pour établir, si on peut dire, une stratégie efficace d'organisation. Après concertation nous avons décidé qu'il serait intéressant de se regrouper chez Alexandre (comme cité plus haut) avec le travail que nous avions fait ou réfléchi tout de même un peu chacun de notre côté. Ainsi en étant regroupés il nous était très facile de communiquer, de s'échanger nos idées, nos bouts de code, de regarder directement ce que l'autre faisait, de le faire avec lui. On ne pouvait pas encore parler de rush ou de préparation de soutenance réellement, en effet la première est une sorte de mise en place du projet donc nos réunions avaient certe l'optique de faire progresser notre projet mais également de nous rapprocher entre nous, d'apprendre à mieux nous connaitre chacun, de savoir comment nous travaillions et ainsi renforcer la cohésion de notre groupe. \\

A l'arrivée  de la soutenance nous nous étions retrouvés pour vérifier que tout fonctionnait bien et nous répartir au mieux nos rôle durant l'oral. 

\subsubsection{La deuxième soutenance}

C'est véritablement pour cette soutenance que les choses ont commencé. En effet l'heure n'était plus à mettre en place nos idées, à réfléchir sur le scénario de notre projet, mais bien à le coder ! Peu à peu entre les 2 soutenances le code prenait de l'ampleur sur le SVN. C'est certainement avec les vacances de février que l'avancée a été la plus fulgurante pour la deuxième soutenance. \\

Durant cette semaine, les réunions et ce que nous pouvons appeler "rush" ont été nombreuses. En effet les idées que nous avions et les résultats que nous voulions atteindre pour cette soutenance devait être respectés (tir du personnage, vie, raccord du menu, chat pour le réseau, IA, ...) pour proposer un produit bien avancé au jury. Ainsi du matin jusqu'en fin d'après midi voir début de soirée nous étions sur nos machines à échanger nos idées, nous aider les uns les autres, nous échanger nos clés usb, remplir petit à petit le SVN toutes les 10 minutes. Nous pensons que ce travail véritablement en groupe soudé a largement partcipé à la progression de notre projet. Si nous n'avions fait que du SVN en rajoutant chacun de notre côté des bouts de code nous n'en serions certainement pas du tout au même point qu'aujourd'hui au niveau de la qualité de notre jeu.

\subsubsection{La troisième soutenance}

Voila la moitié du projet était passée ! Il faut avouer que nous nous sommes alors accordés une petite pause à la fin de la soutenance 2, en plus un mois après il y avait le contrôle 2... Cependant parfois le SVN prenait un petit fichier en plus et grâce au téléphone, à MSN ou autre ou en nous croisant tout simplement à l'école il y avait toujours un échange d'idées permanent entre nous sur le jeu. \\

Heureusement 2 semaines de vacances se sont offertes à nous ! L'occasion de nous concentrer pleinement sur notre projet et de l'avancer grandement. Tout d'abord nous avons travaillé un peu chacun de notre côté en rajoutant nos bouts de code sur SVN. La dose de travail à fournir était importante, en effet pour la soutenance 3 nous voulions un générateur d'objets, une intégration du chat dans le mode multijoueur, l'apparition de nouveaux blocs dans les niveaux et d'autres éléments et ennemis, une amélioration du menu dans le but de simplifier sa gestion, ... Bref beaucoup de travail ! Chacun a donc été en quelque sorte réquisitionné pour travailler sur tel ou tel point et ainsi faire progresser notre jeu. Cela nécessitait que chacun de nous soit bien dans les temps pour éviter de mettre en retard tout le groupe et faire rater la soutenance. Bien sur le contact était toujours de mise entre nous pour savoir où chacun en était, si il était bloqué, si il avait des problèmes. La deuxième semaine a surtout été utilisée pour les réunions pour mettre en commun nos avancées, résoudre les derniers problèmes, réfléchir tous ensemble sur les points qu'aucun de nous n'avait abordés dans son travail et qu'il nous faudrait pour la soutenance. \\

Ainsi se passa la troisième soutenance !

\subsubsection{La quatrième soutenance} 

Et bien évidemment nous voici aujourd'hui à vous présenter notre produit totalement fini, totalement jouable, totalement classe ! \\

Ici plus question de se la couler douce, c'est la dernière ligne droite et chacun de nous a donné son maximum sacrifiant ses heures de sommeil pour arriver aux résultats convoités ! Certes au début les partiels 2 et les révisions ont un peu ralenti l'avancée du projet mais néanmoins on voyait parfois quelques mises à jour de nos fichiers sur le SVN avec de petites avancées sur le réseau, les niveaux, le site Web par exemple ! Une fois le partiel 2 passé c'est véritablement un rush contre la montre qui s'est offert à nous, 2 semaines pour finir notre jeu ! Dès la fin des partiels chacun avait son rôle, ses dates de remise de son travail, la communication était à son maximum tous les jours tout le temps pour se tenir au courant de ce que chacun de nous faisait. Les réunions se faisait un jour sur 2 pour travailler tous ensemble ce qui est plus stimulant que seul, pour mettre en commun nos avancées, discuter de tel ou tel point dans le but de vous proposer aujourd'hui un produit de qualité qui répondra à vos attentes ! 

\subsection{Produit fini}
\subsubsection{Installeur}

Le choix de l'installeur s'est fait assez rapidement, une personne du groupe ayant fait le tutorial en entier de C sur le site du zéro avait repéré l'installeur Inno Setup, qui est très maniable et très facile d'utilisation. Ce logiciel est en plus un logiciel libre permettant de choisir l'endroit où installer le fichier, l'icône à mettre pour l'installeur et permet de mettre une clé d'activation  (qui se situe sur la 4e de couverture) au moment de l'installation. \\

Cependant, l'installation ne peut se faire dans le dossier "Programs Files", à cause des droits d'administrateur requis pour lancer le multijoueur.

\subsubsection{La jaquette}
Toutes les images présentes dans notre jeu ont toujours été de notre propre création, et donc ce n'était pas envisageable d'aller chercher des images ou la jaquette (pour y aposer le nom de notre jeu) sur Internet.\\

La jaquette est la première intéraction entre le jeu et le joueur. En effet, c'est celle-ci qui attire les futurs joueurs potentiels, elle va donner envie au joueur d'acheter le jeu et, bien entendu, d'y jouer. Nous avons choisi d'essayer de mettre les images qui illustraient notre jeu. Si'Sharp au premier plan avec les deux monstres. La jaquette montre ce que doit combattre notre "héro" et informe le joueur qu'il sera submergé à tous les moments. Le fond montre l'univers numérique dans laquelle l'histoire ce déroule.\\

Au dos de la jaquette, nous voulions mettre les principaux écrans du jeu, pour montrer ce en quoi le joueur pourra s'attendre en jouant, avec un écran du multijoueur. L'image du boss a été rajoutée de ce côté pour montrer que c'était l'objectif du jeu. De plus, on a ajouté de petites phrases accrocheuses pour attirer le joueur et lui donner l'envie d'ouvrir le boitier et de jouer.

\begin{figure}[!h]
    \center
    \includegraphics[width=9cm]{jacket.jpg}
    \caption{Jaquette du jeu}
\end{figure}


\subsubsection{Manuel d'utilisation}

Le manuel d'utilisation permettra à tout utilisateur, confirmé ou non, d'acquérir les bases nécessaires pour commencer à jouer. \\

Vous pourrez ainsi y trouver le scénario du jeu ainsi qu'une description détaillée des différents personnages présents, et leur rôle dans l'histoire. Une liste des objets présents et de leurs effets est également présente afin de vous aider à mieux comprendre les mécaniques du jeu durant vos premiers pas.\\

Sur les aspects techniques, une procédure d'installation détaillée est fournie avec les configurations requises. De plus, si vous avez quelques difficultés pour comprendre certains aspects, l'interface est aussi clairement expliquée via une image détaillant les éléments que vous pourrez trouver en parcourant chaque niveau. Toutes les commandes par défault sont aussi inscrites s'il vous arrivait par malheur de les oublier. Enfin si vous rencontrez divers soucis dans l'utilisation du jeu, une page d'assistance est incluse à la fin du manuel.

\clearpage
%Travail effectué
\section {Travail effectué}
\subsection {Moteur jeu}

Pour le moteur du jeu, nous devions connaitre à peu près toutes les différentes parties du projet puisque notre tâche est de les raccrocher entre elles et ce sans aucun problème.\\
Notre travail a donc augmenté de plus en plus au cours des soutenances.


\subsubsection{La première soutenance : la naissance du moteur}
Pour notre première soutenance, nos objectifs étaient minces : comme seules les bases du jeu était présentes, nous n'avions pratiquement rien à raccrocher. Nous nous sommes donc forcés à comprendre avec exactitude comment fonctionnait c\# afin d'optimiser au maximum notre code. Pour la première soutenance nous avons donc séparé les différents éléments de notre jeu en plusieurs classes afin d'avoir plus de souplesse dans notre code (ainsi qu'un code beaucoup plus clair).

\subsubsection{La deuxième soutenance : la croissance exponentielle de la bète}
Cependant, vers la fin de la première soutenance nous avons connu notre premier problème de taille: comment relier notre menu et notre jeu? Comment allions nous passer d'un niveau à l'autre ? C'est seulement après cette soutenance passée que nous avons réussi à résoudre ce problème majeur en incluant un système d'états. Pour cela, nous avons créé une énumération qui correspondait au différents états possibles de notre jeu (en jeu, au menu, dans le menu des options, \ldots). Ensuite il nous suffisait 
de savoir quel était l'état actuel afin d'afficher et de mettre à jour les éléments correspondants.\\

De plus, nous avons décidé d'inclure un éditeur de cartes dans notre jeu. Ainsi le joueur pouvait créer ses propres cartes qu'il utiliserait pour le multijoueur.  Au début, seul les blocs et la position du personnage était inclus, mais les autres éléments du décor sont venus s'y ajouter par la suite, ainsi que la possibilité de changer de fond.\\

\begin{figure}[!h]
    \center
    \includegraphics[width=10cm]{capture_editeur.PNG}
    \caption{Image de l'éditeur de carte}
\end{figure}

 Avec cet éditeur, nous avons commencé à enregistrer nos niveaux dans des fichiers. En effet, précédemment ils étaient inclus directement dans le code de notre projet mais cela nous posait beaucoup de problème pour améliorer les niveaux.
Chaque fichier relatif à un niveau contenait toutes les informations nécessaires à ce niveau : la position initiale du joueur, les positions des monstres, les positions des différents éléments de décor, la musique correspondant au niveau, \ldots, il nous suffisait ensuite de lire ce fichier lors de la création des niveaux afin de pouvoir les créer entièrement. Dès que l'utilisateur souhaitait sauvegarder, on ajoutait un à un les éléments dans le fichier. La possibilité de chargement a également été ajouté par la suite. L'éditeur ayant uniquement la vocation de servir à créer des cartes pour le mode multijoueur et les partager, nous n'avons donc pas jugé nécessaire d'y inclure la modification des limites du terrain ainsi que les monstres qui ne sont présents que dans le mode histoire. Cependant il est possible d'ajouter manuellement des commandes dans les fichiers pour ces éléments et la gestion des niveaux du mode histoire est donc la même.\\

\begin{figure}[!h]
    \center
    \includegraphics[width=5cm]{exemple_fichier.PNG}
    \caption{La représentation du niveau 1 sous forme de fichier}
\end{figure}

Nos toutes premières options ont également commencé à apparaitre à ce moment, le joueur pouvait modifier la langue du jeu afin de la modifier soit en anglais, soit en français. Pour cela, nous avons inclus des fichiers qui étaient composés de mots clés et de leur signification dans l'autre langue. Ainsi, nous pouvions sans problème rajouter d'autres langues en précisant simplement dans les fichiers correspondants les mots clés ainsi que leurs traductions.\\

Pour notre deuxième soutenance, nous avions donc extrèmement progressé grâce à l'utilisation astucieuse des fichiers.\\

\subsubsection{La troisième soutenance : sommes nous dé-générés ??}
Lors de la troisième soutenance, le jeu a connu un réel tournant notamment avec l'apparition du réseau, mais également par le fait que nous arrivions à un point où les bases étaient posées mais le jeu manquait cruellement d'éléments intéressants pour pouvoir vraiment s'amuser. Avec cette optique en tête, un nouvel élément est venu s'ajouter au gameplay : le générateur d'objets. Notre jeu s'inspirant à l'origine de Super Smash Bros Brawl et la génération d'objets en étant l'un des éléments majeurs, il semblait évident que nous devions pouvoir proposer un système similaire. Celui ci a beaucoup modifié la façon dont la partie se déroulait dans le sens où les munitions n'était plus illimitées et nous ne pouvions alors plus nous contenter de rester sur un point fixe pour tuer la totalité des monstres. \\

Ce générateur fait apparaitre des objets au bout d'une durée donnée de type et de position totalement aléatoire, néanmoins la position appartient toujours à l'écran du joueur afin d'éviter que les effets du générateur soient invisibles dans les niveaux longs. Ces objets peuvent être de 2 natures différentes, il y a d'abord les munitions et les armes qui seront nécessaires à l'élimination des monstres du niveau, et il y a aussi les caisses de soin qui sont obligatoires si vous voulez réussir à survivre dans ces environnements hostiles. Lors de la collision avec un objet, celui ci indique son type ce qui permet alors de déterminer l'effet à appliquer sur le joueur.\\

\begin{figure}[!h]
    \center
    \includegraphics[width=2cm]{munition1.png}
    \includegraphics[width=2cm]{soin.png}
    \caption{2 types d'objets pouvant apparaitre}
\end{figure}

\subsubsection{La dernière soutenance : embellisons la chose}
Enfin après la troisième soutenance, il nous restait très peu de travail puisque la quasi-totalité du jeu était déjà reliée. Cependant nous avons tout de même réussi une amélioration majeure puisque les commandes du personnage étaient désormais conservées dans un fichier, ce qui permettait à l'utilisateur de pouvoir les modifier facilement.\\

Nous avons également développé notre propre système d'analyse de l'entrée clavier afin de pouvoir demander à l'utilisateur le nom des niveaux qu'il veut charger, sauvegarder ou héberger ou l'adresse IP correspondant au serveur sur lequel il souhaite se connecter.\\

De plus, nous avons géré plusieures erreurs en rajoutant des messages d'erreur lorsque, par exemple, le joueur tente d'héberger un niveau qu'il ne possède pas.\\

Enfin, afin d'empécher l'utilisateur de modifier les niveaux correspondant au mode histoire, nous avons séparé les niveaux de l'histoire des niveaux personalisés dans différents fichiers. Grâce à cela, nous avons également pu restreindre l'éditeur aux niveaux personalisés, le joueur ne pourra donc plus modifier à sa guise les niveaux du mode histoire.\\

De plus, un nouveau type de jeu a été créé pour permettre au joueur de s'amuser à l'infini !

\subsection {Moteur son}

Le moteur son, tout au long de la conception de notre jeu, a été de loin celui qui nous a demandé le moins de travail. Cependant cela ne veut pas dire que nous l'avons négligé ou qu'il a été baclé. Il a bénéficié du même soin que les autres moteurs en action dans notre projet. \\

A la première soutenance une grande partie du travail à effectuer sur ce moteur avait déjà été accomplie. Nous avions recherché des musiques de fond qui pourraient correspondre à notre jeu. Nous nous étions orientés vers des musiques de "keygen" qui sont synthétiques et qui reflètent plutôt assez bien l'idée du jeu. Cependant les musiques étaient dans une extension (.xm) non utilisable par\emph{ Microsoft Cross-Platform Audio Creation Tool 2 (XACT2)} qui ne prend en charge que les (.wav). Nous avions pu utiliser ces musiques grâce au convertisseur intégré dans Winamp. Nous avions également enregistré, grâce au logiciel Audacity, à nos petites voix ainsi que grâce aux micro que nous possédons, les premiers bruitages de notre jeu (saut du personnage, bruits de pas), cela nous avait valu de grands moments de fou rire pour tenter désespérement d'obtenir des sons potables. Dans le code en lui même nous avions dû créer une classe son ce qui nous permettait de gérer bien plus facilement le lancement, l'arrêt, le changement ou autre de musique sans avoir à toucher à beaucoup de lignes un peu partout dans notre projet. \\

A la deuxième soutenance le travail fourni était minime. Simplement continuer à améliorer notre classe son avec l'arrivée de nouveaux éléments tels que les tirs par exemple et compresser nos musiques grâce aux fonctionnalités de XACT ce qui rendait notre jeu plus "léger". \\

Pour la troisième soutenance il ne restait pratiquement plus rien à appliquer...une musique avait été intégrée au menu pour mettre un peu d'ambiance dès l'arrivée du joueur !\\

Pour la version finale, nous avons tenu à ajouter quelques bruitages notamment au niveau de la victoire et de la défaite qui sont désormais accompagnées de sons adaptés.\\

\subsection {Moteur réseau}

Le moteur réseau, la partie la plus importante dans l'esprit de départ de notre jeu vidéo. C'est la partie la plus délicate qui a été codée par rapport à la synchronisation de tous les clients. 
\subsubsection{Ebauche d'idée}
Nous avons débuté, à la première soutenance, avec une idée théorique de développement de notre partie réseau. Nous avions fait des recherches sur tous les moyens de communication de données avec le langage C\#, nous avions trouvé : Live (système de réseau utilisant les serveurs de Microsoft qui est payant), Lidgren (une bibliothèque réseau mais qui manquait cruellement de documentation) mais nous avons finalement utilisé System.Net qui est intégré de base à Visual Studio. Nous avons développé notre théorie autour du principe de fonctionnement suivant :\\

Côté serveur :
\begin{itemize}
\item Thread 1 : socket d\rq{}écoute dans une boucle infinie qui attend les connexions entrantes.
\item Thread 2 : il permettra la lecture en continu des données envoyées par les clients.
\item Thread 3 : vérifie continuellement les connexions, si tous les clients (joueurs) sont encore présents.
\item Thread 4 : permet d\rq{}envoyer les données sur une socket lorsque le serveur en reçoit.\\ 
\end{itemize}

Puis du côté des clients : 

\begin{itemize}
\item Thread 1 : permet de créer et de connecter la socket cliente au serveur.
\item Thread 2 : lira les données entrantes envoyées par le serveur.
\item Thread 3 : affichera les joueurs à l\rq{}écran.\\
\end{itemize}
\subsubsection{Un tchat pour montrer l'exemple}
Pour commencer à developper cette théorie sans penser à prendre en compte tous les éléments qu'un jeu demande, nous avons créé un serveur basé sur ce principe de fonctionnement, avec un client pour montrer le bon fonctionnement du serveur. Ce qui a donné un tchat en mode console.

\begin{figure}[!h]
    \center
    \includegraphics[width=14cm]{chat.png}
    \caption{Tchat de la soutenance 2}
\end{figure}

Le déroulement du processus du serveur se passe en quatre étapes. Tout d'abord, il initialise la connexion sur l'IP attribué à l'ordinateur où il a été lancé. Puis dans une boucle infinie, il recherche si de nouveaux clients essayent de se connecter, si c'est le cas il les ajoute à la liste des clients existants. Parallèlement, le thread d'écoute du réseau est lancé avant l'arrivée d'un client sur le serveur. Il va vérifier si un client essaye d'envoyer des données, si c'est le cas il récupère le message sous un tableau de bytes et le renvoie à tous les autres clients connectés. Cependant un autre thread tourne en arrière plan pour vérifier si tous les clients  enregistrés sur le serveur sont toujours connectés, si ce n'est pas le cas, il le signale, et ferme la connexion avec ce dernier.\\

\subsubsection{Réseau intégré au jeu}
Pour la troisième soutenance il ne nous restait plus qu'à intégrer le serveur et le client au jeu. Le serveur en lui même, dans son fonctionnement n'a guère changé, mis à part qu'il trie les clients auquels il doit renvoyer les informations reçues. 

Du coté du fonctionnement, on retrouve un peu le système du tchat de la soutenance 2. Chaque client se connecte au serveur, qui est en console pour qu'il puisse être géré complètement à partir du jeu (optique de mise en place d'une machine serveur). Au moment de la connexion le serveur envoie un identifiant au client pour qu'il puisse s'identifier auprès des autres joueurs et donc afficher sur le bon personnage sa position. Ensuite le client envoie ses informations au serveur (ex : ID+Pos.X+Pos.Y) qui redistribue entre tous les clients, le serveur évite de renvoyer l'information au même client qui réduit donc le temps de traitement des clients. Puis l'injection de ces informations dans la classe multi permet le déplacement de l'adversaire.\\


\begin{figure}[!h]
    \center
    \includegraphics[width=14cm]{reseau.png}
    \caption{Principe du réseau intégré au jeu}
\end{figure}

Pour la troisième soutenance nous n'avions que le déplacement des deux joueurs. \\
\subsubsection{Réseau final}
Pour cette dernière soutenance, nous avons intégré les tirs, la collision, la génération d'objets durant la partie et le partage de la carte pour chaque joueur.
Au moment où le joueur host la partie, il envoie la carte au serveur qui la réceptionne et la garde en mémoire. Au moment où un joueur se connecte au serveur, après avoir attribué une adresse, il lui envoie la carte et le client l'écrit dans un fichier pour ensuite la charger pour y jouer.\\

Une fois la partie démarrée, les joueurs envoient en continu des messages, sous forme de tableaux de bytes, qui représentent à la base un entier de 64 bits. Chacun des chiffres composant cette entier transporte une information bien précise. Par exemple, les 7 premiers chiffres serviront à identifier la position du joueur adverse, les 4 premiers indiquent la position sur X et les 3 suivants sur Y. Cependant il est nécessaire d'envoyer beaucoup d'autres informations ! Ainsi chaque joueur envoie l'angle de son arme et indique s'il tire ou non et avec quelle puissance (en fait il indique seulement la puissance, mais une puissance de 0 signifiera qu'il n'y a pas de tir à initialiser).\\

\begin{figure}[!h]
    \center
    \includegraphics[width=14cm]{messages_reseau.png}
    \caption{Un exemple de message envoyé}
\end{figure}

 De plus, nous voulions également inclure le générateur d'objets qui était apparu lors de la troisième soutenance pour le mode solo. Pour cela nous avions d'abord pensé envoyer un code permettant d'identifier l'objet lors du ramassage pour indiquer à l'autre joueur que l'objet avait été récupéré, et un type indiquant s'il s'agissait de munitions ou d'une caisse de soin par exemple afin de générer le même objet chez les deux joueurs. Cependant, d'une ce système ne permettait pas une position aléatoire lors de l'apparition de l'objet, mais en plus il y avait divers soucis lorsque le message de récupération de l'objet était mal reçu par l'autre joueur. Au final, c'est une autre méthode, beaucoup plus simple, qui a été retenue. Désormais seul l'hébergeur envoie un code et un type mais le code est généré aléatoirement et sert à faire apparaitre l'objet sur une position aléatoire tout en étant la même pour les 2 joueurs. La récupération en revanche est directement gérée localement via le système de collision puisque on connait la position du joueur adverse. De plus, l'hébergeur attend la connection du joueur adverse avant de commencer à générer des objets ce qui permet d'éviter la triche comme par exemple débloquer la totalité des armes avant l'apparition de l'adversaire.\\

La vie est également gérée localement, en effet lors de la mort d'un joueur, celui ci envoie un message spécial afin de signaler à l'autre joueur qu'il a gagné, un message s'affiche alors sur l'écran de chacun et invite les joueurs à retourner sur le menu.\\

\subsection {Moteur graphique}

Le moteur graphique de notre projet a été une des premières parties (avec le moteur du jeu) sur laquelle nous avons travaillé. Cela est bien évidemment logique puisque pour travailler sur notre projet nous devions être capable de voir ce que nous faisions.

\subsubsection{Envoyons le héros dans son monde !}
Nous avons donc commencé à dessiner rapidement un petit personnage grâce à des logiciels d'image (assez simpliste étant donné nos faibles compétences en dessin) et nous l'avons affiché à l'écran.
\begin{figure}[!h]
    \center
    \includegraphics[width=2cm]{joueur.png}
    \caption{Le personnage incarné par le joueur}
\end{figure}

 L'affichage a été plutôt facile mais évidemment, un personnage figé à l'écran présente très peu d'intérêt. Nous nous sommes alors fixés notre premier objectif : permettre au joueur de déplacer le personnage à l'aide des touches du clavier. Même si cela peut paraitre simple à première vue, il nous a tout de même fallu quelques temps afin d'arriver à un résultat correct : notre personnage pouvait se déplacer à l'aide des touches du clavier `Z' (vers le haut) `Q' (vers la gauche) `S' (vers  le bas) et `D' (vers la droite) tout en empêchant le joueur de sortir de l'écran.\\
 
Cependant, nous n'étions tout de même qu'au début du déplacement de notre personnage puisque nous souhaitions que le personnage chute en continu comme s'il était soumis à la gravité tout en ayant la possibilité de sauter sur une certaine hauteur.\\

Evidemment, résoudre cela ne fut pas simple mais après plusieurs heures de travail acharné, nous sommes arrivés à un résultat satisfaisant : nous pouvions désormais sauter et lorsque nous ne sautions pas, le personnage tombait jusqu'à atteindre le bas de l'écran. L'ajout d'une distance maximale de saut fut ensuite extrèmement simple à rajouter.\\

Nous possédions donc un personnage entièrement capable de se déplacer dans l'écran et soumis à la gravité, autant dire que nous étions vraiment fiers du résultat mais quelque chose manquait toujours dans le jeu : des éléments de décors sur lesquels le joueur pourrait se déplacer (c'est bien beau de se déplacer mais si c'est pour le faire dans un espace vide, il n'y a que peu d'intérêt).\\

Nous avons donc rajouté notre tout premier décor : un bloc carré. Et avec l'apparition de ce bloc, nous avons également dû nous occuper de la collision entre le joueur et les différents blocs présents. Pour cela nous avons utilisé la collision par rectangle implémentée dans XNA. 
De plus, notre personnage devait être capable de tirer et donc il nous a fallu implémenter dans le jeu une arme, portée par le joueur et qui suivait le mouvement de la souris.\\

Nous avons donc réussi à présenter lors de notre première soutenance un début de jeu dans lequel notre personnage se déplaçait correctement, subissait la gravité, pouvait entrer en collision avec un élément de décor et possédait une arme qui suivait les déplacements de la souris, le tout avec un magnifique fond d'écran.\\
\clearpage
\begin{figure}[!h]
    \center
    \includegraphics[width=13cm]{imageJeuSoutenance1.png}
    \caption{Une image de notre jeu lors de la première soutenance}
\end{figure}

Evidemment il nous restait encore beaucoup de chemin à parcourir avant la fin de notre jeu mais les bases était posées.

\subsubsection{ A l'attaque ! Que le combat commence !}

Il manquait néanmoins un élément essentiel au jeu: les tirs. La première arme était déjà présente mais ne servait qu'en tant que décor. Cependant nous ne savions pas au démarrage comment nous allions faire pour gérer l'affichage de plusieurs tirs en même temps. En effet, dans une première version les tirs ne pouvaient avoir lieu que lorsque la balle précédente était sortie de l'écran ou était entrée en collision ce qui était relativement génant. Néanmoins,  nous avons réussi à trouver la solution en nous servant des structures et d'un tableau. Cette structure permettait de retenir pour chaque balle sa position, sa puissance, son angle ou encore la texture utilisée. Ainsi avec le tableau on pouvait mettre à jour les positions de chaque balle et les afficher très simplement, et celui ci se vidait et se remplissait automatiquement avec les fonctions utilisées. Chaque balle suivait ainsi l'angle définit à l'initialisation afin d'atteindre la position du curseur à ce moment. De plus avec l'apparition des premiers monstres, la puissance consistait en un entier qui était retranché à leur vie lors d'une collision avec une balle. \\

\begin{figure}[!h]
    \center
    \includegraphics[width=1cm]{tir1.png}
    \caption{L'une des balles utilisées pour les tirs}
\end{figure}

Au départ l'initialisation du tir se faisait à chaque pression sur le bouton gauche de la souris, mais pour des raisons pratiques nous nous sommes finalement décidé à inclure une fréquence de tir qui permettait ainsi de rester appuyé sur la souris pour tirer et de jouer sur cet élément pour ajouter de nouvelles armes. Avec ces nouvelles armes, nous avons donc rapidement inclus la possibilité de changer d'arme avec la touche 'W'. En effet, 3 armes étaient disponibles, chacunes disposant d'une fréquence de tir, d'une puissance et d'une texture propre.\\

\begin{figure}[!h]
    \center
    \includegraphics[width=2cm]{arme2.png}
    \caption{L'une des armes du héros}
\end{figure}

De plus, avec l'apparition des premiers monstres, nous avons commencé à donner de la vie au joueur en permettant aux joueurs de voir leurs points de vie actuels grâce à une barre de vie présente dans le coin supérieur gauche de l'écran.\\

\begin{figure}[!h]
    \center
    \includegraphics[width=5cm]{etat.png}
    \caption{La barre de vie du personnage}
\end{figure}

Cette barre de vie descendait à chaque fois que le personnage se faisait toucher par un tir ennemi en se colorant différemment selon l'état de santé du personnage : lorsque le personnage possède plus de 50\% de sa vie, la barre est de couleur verte, entre 50 et 10\%, la barre est de couleur jaune et enfin lorsque le personnage possède moins de 10\% de sa vie, la barre est colorée en rouge. De cette manière, le joueur pouvait voir son état de santé actuel non seulement grâce à une barre de vie, mais également grâce à un code de couleur représentatif. La défaite est également devenu possible dès cet instant (et nous avons eu la joie de l'expérimenter plus d'une fois ...).

\subsubsection{Un monde bien plus vaste !}
Lors de nos réunions de projet, nous avons également constaté un léger problème du côté des niveaux : ces derniers étaient en effet très courts puisqu'ils se limitaient à la taille de l'écran. Nous avons donc décidé d'implémenter un défilement horizontal dans les niveaux. Nous avons beaucoup réfléchi sur la manière d'inclure ce défilement et finalement nous l'avons mis en place en déplacant non pas le personnage mais le décor lorsque le personnage se situe au milieu de l'écran donnant ainsi l'impression que le personnage avançait alors qu'en réalité il était le seul élément qui ne se déplaçait pas.

\subsubsection{Le menu s'il vous plait !}
Un menu avait également été rajouté au jeu afin de permettre au joueur de lancer le mode histoire, d'ouvrir l'éditeur, de changer les options ou encore de quitter. Le menu était controlé grâce aux flèches directionelles du clavier, le joueur pouvait choisir ce qu'il voulait faire puis il n'avait qu'à appuyer sur entrée pour valider son choix.\\
%on parle pas des différentes instructions qui allait avec évidemment :D

\begin{figure}[!h]
    \center
    \includegraphics[width=12cm]{menuPrincipal.png}
    \caption{Le menu principal à la deuxième soutenance}
\end{figure}

Cependant  au fur et à mesure de la progression de notre jeu, de sa complexification et de l'augmentation du nombre d'options, de modes et autres il nous a fallu imaginer un nouveau menu qui serait bien plus pratique dans sa manipulation et sa gestion au sein du code. Après de nombreuses recherches il nous a paru évident qu'il fallait passer par un système de menu à boutons qui était bien plus pratique que l'ancien. Désormais on parcourt le menu à l'aide du curseur de la souris et les boutons changent légèrement de couleur lorsque l'on passe dessus ou lorsque l'on clique. De plus cette forme de menu nous permettait de modifier plus facilement le design de notre menu, en effet les boutons ne sont que des images que l'on vient ajouter à un fond et sur lesquelles on peut cliquer. Du coup si on souhaite changer le design du menu il suffit simplment de mettre une nouvelle image dans le code et le tour est joué ! C'est pratique ! 

\begin{figure}[!h]
    \center
    \includegraphics[width=12cm]{menu2.png}
    \caption{Le menu principal à la troisième soutenance}
\end{figure}

La preuve, pour cette dernière soutenance nous allons vous présenter un menu avec un design de bouton tout à fait différent de celui de la troisème soutenance alors que pourtant nous n'y avons passé que une simple heure dans leur modification ! 

\subsubsection{Il marche !}
De plus afin de donner plus de vie à notre personnage, nous avons créé plusieures textures différentes qui représentaient son déplacement, désormais les pieds du joueur se déplaçaient lorsque ce dernier se déplaçait ce qui lui donnait un air plus réel même si ce changement était très peu visible.\\

\begin{figure}[!h]
	\center
    	\includegraphics[width=2cm]{joueur_droite.png}
	\includegraphics[width=2cm]{joueur_droite2.png}
	\includegraphics[width=2cm]{joueur_droite.png}
	\includegraphics[width=2cm]{joueur_droite2.png}
    \caption{Exemple de déplacement du personnage}
\end{figure}

\begin{figure}[!h]
    \center
    \includegraphics[width=13cm]{imageJeuSoutenance2.PNG}
    \caption{Le premier niveau lors de la seconde soutenance}
\end{figure}

Pour la deuxième soutenance, nos avions donc fait d'énormes progrès, notre personnage pouvait se déplacer dans des niveaux bien plus grands, il possédait de la vie, pouvait tirer, tuer les ennemis et même mourir dans d'atroces souffrances. Nous étions vraiment très satisfaits de nous lorsque nous avons vu les progrès que nous avions fait depuis la première soutenance, mais cela n'était tout de même que le commencement puisque notre jeu a continué à évoluer grandement lors de nos travaux suivants.\\

Juste après la deuxième soutenance, nous nous sommes rendus compte que le nombre de décors dans le jeu était assez faible. En effet, nous n'avions qu'un seul type de décor, et ce n'était qu'un simple bloc qui empéchait le joueur de se déplacer. Nous avons donc décidé de rajouter d'autres décors.

\subsubsection{Les trappes}

Ces trappes sont simplement des blocs qui s'ouvrent ou se ferment en fonction du temps et peuvent piéger les malheureux joueurs qui s'y aventurent. Si les joueurs se trouvent piégés dans une trappe, ils se trouvent alors dans l'incapacité de se déplacer et ce jusqu'à l'ouverture de la trappe. Il s'agit donc là d'un élément important à ne pas négliger et pouvant influencer les décisions des joueurs.

\begin{figure}[!h]
    \center
    \includegraphics[width=4cm]{plateforme_ferme.PNG}
    \caption{Une trappe actuellement fermée}
\end{figure}

\begin{figure}[!h]
    \center
    \includegraphics[width=4cm]{plateforme_ouvert.PNG}
    \caption{Cette meme trappe ouverte et ne génant plus les joueurs}
\end{figure}

\subsubsection{Les pics}
Ces pics se comportent à première vue comme des blocs classiques mais si le joueur a le malheur de toucher un pic, il verra alors sa vie descendre et cela continuera tant que le joueur sera en contact avec les pics.

\begin{figure}[!h]
    \center
    \includegraphics[width=2cm]{pic.PNG}
    \caption{Un joli petit bloc de pics attendant un joueur}
\end{figure}

Ces deux éléments de décor nous ont posé quelques problèmes pour leur intégration car contrairement aux blocs, ils devaient soit se modifer au cours du temps (pour les trappes), soit infliger des dégats au joueur lors de collision (pour les pics). De plus nous devions réfléchir à une manière d'implémenter ces décors dans notre code puisque jusque là, chaque niveau possédait seulement une liste de bloc servant à représenter les différents blocs présents dans le niveau.\\

La solution s'est donc imposée d'elle même : nous devions utiliser l'héritage. Nous avons donc créé une classe décor dont tous les décors héritaient. De cette manière, tous nos problèmes était résolus en même temps : nous pouvions désormais posséder une liste de décors pouvant être de n'importe quel type, chaque décor pouvait intéragir facilement avec le joueur et pouvait modifier son état au cours du temps.\\

\subsubsection{Les détails qui tuent !}
De plus, afin d'améliorer encore plus la longueur des niveaux, nous avons implémenté un défilement vertical en plus du défilement horizontal déjà présent.\\

Son implémentation fut presque similaire mais nous avons tout de même eu plusieures difficultés à gérer la chute du joueur avec ce défilement puisque la vitesse de chute n'était pas constante mais augmentait tout au long de la descente, mais finalement après un certain temps  passé dessus, le défilement vertical était parfaitement présent et ce sans aucun bug.\\

Mais l'implémentation de ce nouveau défilement entrainait un nouveau problème mineur, puisque le joueur était presque libre de toutes ses déplacements (sous certaines limites), il nous fallait un moyen de pouvoir afficher le fond d'écran de notre jeu plusieurs fois si besoin, afin de garder une certaine esthétique. Pour cela, nous avons donc créé un nouveau fond d'écran qui se reproduisait presque à l'identique sur les côtés. Ainsi, lorsque le joueur se déplacait, il ne se rendait pas compte que plusieures images étaient affichées mais il pensait simplement que l'arrière plan se répétait indéfiniment.\\

Pour la dernière soutenance, nos améliorations sur le moteur graphique faisait surtout parties du design du jeu. En effet, nous avons modifié plusieurs éléments afin d'améliorer le rendu visuel : l'écran de victoire possédait désormais un petit arrière plan d'affiché dans le but de faire ressortir le texte. De plus, les boutons correspondants au menu ont reçu un nouveau design, et de nouveaux fonds de niveau ont été trouvés. Nous avons également changé la représentation de l'état des personnages qui ne permettait pas jusque là une visibilité optimale de la carte, ainsi vous pourrez voir clairement l'état de santé de votre personnage sans avoir à lever les yeux en risquant ainsi, pendant ce laps de temps, de vous prendre une balle sans l'avoir vu , la barre de vie étant directement située au dessus de votre personnage. De plus les munitions disponibles pour l'arme courante sont également affiché sur cette barre. Nous avons profité de ce changement pour afficher également la barre de vie des ennemies et ainsi mieux informer le joueur sur les dégâts qu'il inflige.\\

Nous avons également rajouté des vidéos à notre projet afin  de donner au joueur un aperçu du logo de notre groupe et du logo d'EPITA au lancement du jeu. De plus, de nouveaux crédits ont été créés en vidéos pour un effet largement supérieurs aux crédits précédents. Enfin, avec l'apparition du boss de notre jeu, nous avons également fait une petite vidéo de fin lorsque le joueur aura tué Van'Hithas. Toutes ces vidéos ont été créé grâce au logiciel After Effects et s'adaptent avec les options du jeu. Par exemple si leu jeu est en anglais sans son alors les vidéos seront en anglais sans son aussi.

\subsection {Site Web}

Pour ce projet nous nous devions de créer un site Web pour présenter notre jeu, son histoire, sa progression, les problèmes qu'il nous a causé et les solutions que nous avons trouvées, les membres de notre team (à savoir Nescient) et également proposer des téléchargements de nos différents rapports, de fonds, de musiques et du jeu en lui même bien entendu ! \\

\subsubsection{C'est un site Internet ce truc là ??}
Reprenons donc tout depuis le début. Tout d'abord étant donné que nous n'avions pratiquement aucune connaissance en matière de création de site Web (ou très peu) il nous a fallu apprendre à utiliser le HTML combiné au CSS à l'aide de nombreux tutoriels glanés sur ceux qu'Internet nous offre (ok avouons que Le Site du Zéro nous a beaucoup aidé). Au fur et à mesure que nous en comprenions le fonctionnement et que nous assimilions les bases nous inventions un peu chacun de notre côté différentes versions de ce que pourrait être notre site. Cela nous a permis d'acquérir un peu d'expérience et de pratique qui sont le meilleur moyen d'apprendre. Une fois que nous pensions avoir quelque chose de relativement convenable à notre échelle nous avons décidé de confronter nos différentes versions du site. Chacun de nous avait réalisé un travail avec ses qualités et ses défauts, ses idées originales ou non pour la présentation, le contenu des pages ou autre. Ainsi était né le début de notre site, une sorte de fusion de tous les meilleurs éléments de chacun de nos "sites". Et c'est d'ailleurs cette version que nous vous avions présentée à la première soutenance. A savoir un site avec un design assez basique mais qui contenait déjà les rubriques principales :\\
\begin{itemize}
\item une page d'accueil avec les différentes news relatives au site (comme les mises à jours des rubriques, etc) ou des événements importants pour le projet 
\item Une page sur le jeu, pour en faire la description de l'histoire et des modes de jeu
\item une page avec les brèves présentations des différents membres de l'équipe de réalisation de BUG pour que les visiteurs nous connaissent un peu plus
\item Une quatrième page quant à elle plus centrée sur l'avancée du jeu en lui-même, tout ce qui touche au gameplay, aux visuels du jeu par exemple
\item pour montrer les déboires rencontrés au cours de notre travail (tant au niveau du groupe, qu'au niveau du jeu ou du site), nous avions également créé une page sur les problèmes que nous avons rencontrés ainsi que les solutions qui se sont alors offertes à nous pour les résoudre
\item Pour que le public ait accès à nos ressources et à d'autres "objets" en extra comme les fonds, les musiques du jeu, les dessins de personnages et bien sur les différents fichiers à installer pour le jeu, une page existait aussi  
\item De plus, d'un point de vue un peu plus professionnel, pour les différents rapports de soutenance et autres cahiers des charges, il existe une page spécialement réalisée pour permettre d'y accéder directement en ligne. 
\item Enfin pour toute remarque des internautes sur le site, le jeu, pour nous féliciter ou tout autre délation une dernière rubrique de contact avait été installée. Nous avions imaginé un formulaire d'envoi de mail qui nous avait forcé à passer cette page en PHP. Le visiteur laissait son adresse mail, entrait le sujet de son message, puis rédigeait sa formulation. Il ne restait plus qu'à envoyer! Une boite mail de team avait été ouverte pour recueillir ces messages et ainsi chacun des membres du groupe avait accès aux réclamations des visiteurs.\\
\end{itemize} 
Le contenu des pages était bien entendu délimité par un cadre blanc et une "bannière" avait été mise. \\

\begin{figure}[!h]
    \center
    \includegraphics[width=13cm]{site1.png}
    \caption{La page d'accueil du site à la première soutenance}
\end{figure}

\subsubsection{Ca claque !}
Pour la deuxième soutenance nous nous étions principalement concentrés sur la forme de notre site. Le fond avait été changé, en effet à la première soutenance c'était tout simplement un fond Matrix légèrement modifié, pour prendre la forme d'un fond bleu proche de Matrix certe mais cependant différent pour éviter tout plagiat. Les pages étaient quant à elles restées les mêmes, simplement le contenu s'était étoffé bien évidemment ! Pour cette soutenance nous avions enfin une bannière définitive avec le nom de notre projet ainsi que le logo de notre team. Notre menu était toujours situé à gauche du contenu et permettait d'accéder au différentes pages. Nous lui avions également ajouté un cadre comme pour le contenu de notre site et avions donné un effet de transparence pour discerner le fond derrière le texte. Le point réellement important était l'apparition d'un trombinoscope avec les photos des membres de la team. \\
\clearpage
\begin{figure}[!h]
    \center
    \includegraphics[width=10cm]{site2.png}
    \caption{La page d'accueil du site à la deuxième soutenance}
\end{figure}

\subsubsection{Le site s'est endormi en cours de route}
A la troisième soutenance les éléments modifiés au site pouvaient se compter sur les doigts de la main ! Le menu était passé en une barre horizontale un peu à la manière du site de Fedora et les rubriques de ce menu se coloraient suivant la page où nous étions pour que le visiteur puisse se situer pour ainsi dire. Ainsi nous avions pu enlever les titres sur les pages et ainsi "alléger" le visuel et bien entendu nous travaillions toujours sur le contenu et la mise à jour des news du site. \\

\begin{figure}[!h]
    \center
    \includegraphics[width=10cm]{page_site3.png}
    \caption{La page d'accueil du site à la troisième soutenance}
\end{figure}

\subsubsection{Un peu de dynamique dans ce monde de statique}
Pour finir correctement ce projet, nous avons voulu reprendre complètement le site Web, mais cette fois ci d'un point de vue technique, pour pouvoir le simplifier et le dynamiser. \\

En premier lieu, pour pouvoir simplifier le code, en cas d'ajout de la page ou de modification, nous avons passé toutes nos pages en PHP (Hypertext Preprocessor) pour pouvoir inclure des portions de page comme le menu et le pied de page. Cela nous permet donc de modifier une fois le menu à un endroit à la place de modifier toutes les pages où était présent le menu.
De plus, voyant la liste de nos actualités sur certaines pages, nous avons donc monté une base de données à l'aide de phpMyAdmin avec toutes les données présentes sur notre site auparavant. Cependant ce qui sous entend base de données, dit un protocole facilement utilisable pour rajouter une actualité sans passer directement par le panneau d'administration de phpMyAdmin, donc nous avons rajouté un répertoire protégé avec un mot de passe où se trouvent des formulaires pour rajouter des tickets sur notre site. Cela rendait, pour nous, un site vraiment plus profesionnel que d'aller modifier la page HTML pour y rajouter les actualités.

\begin{figure}[!h]
    \center
    \includegraphics[width=13cm]{site4.png}
    \caption{La page d'accueil du site actuel}
\end{figure}
 
 
\subsection{Intelligence Artificielle}

L'intelligence artificielle n'a réellement été abordée qu'à partir de la seconde soutenance, en effet la priorité était d'abord de comprendre le fonctionnement d' XNA et d'avoir un personnage capable de se déplacer correctement.

\subsubsection {Les Bug}
Dès ces bases acquises, nous avons pu commencer l'ajout des différents monstres (connus sous le nom de "bug" si vous avez suivi le scénario). Pour cela nous avons d'abord décidé d'ajouter un monstre assez simple qui aurait des caractéristiques proches de celles du héros. C'est pourquoi nous l'avons doté d'une arme et de la possibilité de tirer en direction du héros en plus d'un design relativement proche il faut bien l'avouer. Celui ci était dès le départ soumis aux collisions avec le décor et pouvait se déplacer de gauche à droite et inversement selon des coordonnées que nous pouvions facilement définir. De plus, avec le système de fichier permettant de paramétrer les niveaux que nous venions d'ajouter (voir la section moteur de jeu), il était très aisé d'ajouter des monstres à nos niveaux. Par exemple si vous écriviez la ligne: monstre 100,50,90,150 vous obteniez alors dans ce niveau un monstre apparaissant à la position 100 sur x et 50 sur y, et se déplaçant entre les positions 90 et 150 sur x tout en étant soumis à la gravité.\\

\begin{figure}[!h]
    \center
    \includegraphics[width=4cm]{mob1_rapport.PNG}
    \caption{Notre premier monstre et son arme}
\end{figure}

Cependant nous ne voulions pas nous limiter à un unique type de monstre et c'est pourquoi nous avons décidé dès la soutenance suivante d'inclure un second monstre totalement différent dans son fonctionnement. En dehors de sa couleur et de sa forme (qui a pour but d'évoquer des pics ou bien un cactus avec la couleur), celui ci n'avait pas la possibilité de tirer mais avait plutôt pour objectif de géner le joueur lors de la récupération des objets apparus avec le générateur à la soutenance 3 (voir la section moteur de jeu). En effet, les pics qui recouvrent son corps (si si je vous assure ce sont des pics!) pouvaient blesser le joueur lors d'un contact obligeant ainsi le joueur à le vaincre ou le contourner pour pouvoir passer sans risque.\\

\begin{figure}[!h]
    \center
    \includegraphics[width=4cm]{mob2.PNG}
    \caption{Le second monstre (ne vous fiez pas à son air pacifique !)}
\end{figure}

Ces deux monstres sont intégrés de la même façon au jeu et sont entièrement et très facilement paramétrables autant sur leur position et leur déplacement que sur la puissance ou encore la vie. Tout deux sont soumis aux collisions des tirs et du décor depuis leur apparition. Il est possible de les ajouter via le système de fichier des niveaux via la ligne : monstreZ x,y,l-g,l-d en remplaçant Z par le type du monstre (1 pour les rouges , 2 pour les verts) , x et y par la position de départ sur ces coordonnées et l-g et l-d par les limites de déplacement gauches et droites sur l'axe x. De plus, nous avons décidé d'ajouter une barre de vie au dessus de chaque monstre dans la version finale permettant de rendre l'affichage plus clair et de pouvoir voir l'effet des tirs du héros, et il est désormais possible de préciser cette vie dans les fichiers pour chacun des monstre afin de l'adapter en fonction de la longueur ou bien de la difficulté du niveau.

\subsubsection{Van'hithas}

La version finale du jeu est également l'occasion de vous montrer enfin le visage du fameux Van'Hithas dont vous entendez le nom à chaque début de soutenance. Sans plus de suspence le revoici donc pour une deuxième fois (il fallait bien ça depuis le moment qu'on vous en parle) :\\

\begin{figure}[!h]
    \center
    \includegraphics[width=4cm]{boss.png}
    \caption{Van'Hithas}
\end{figure}

Comme vous avez sans doute pu le remarquer, son design est fortement inspiré du héros. En effet, en réfléchissant à ce à quoi nous pourrions le faire ressembler, nous nous sommes dit qu'il serait judicieux d'en faire une sorte d'ancien héros qui aurait mal tourné d'où le côté plus sombre et l'apparition de cornes. N'oublions pas que cet ennemi est à la base un programme qui fut créé par les hommes mais qui par une erreur du compilateur OKa'mel, est devenu maléfique et a décidé de prendre le contrôle des systèmes informatiques de la planète.\\

Mais en dehors du design, celui ci étant considéré comme le boss final du jeu, il lui fallait nécessairement une intelligence artificielle plus complexe que celle des précédents adversaires qui se contentaient de se déplacer de droite à gauche et de tirer vers le joueur ou bien de le piquer s'il s'approchait. Nous avons donc opté pour un système basé sur plusieurs phases changeant selon le temps, tout en essayant, pour ce grand final, d'utiliser au maximum les éléments que nous avions déjà intégrés aux soutenances précédentes tels que les pics, le générateur, ou encore tout simplement l'apparition des autres ennemis.\\

Il existe 4 phases distinctes:\\
\begin{itemize}
\item La première phase est une introduction au combat. Durant cette phase le boss ne vous attaquera pas, cependant il est totalement invulnérable il est donc inutile de l'attaquer lachement et de gâcher vos munitions. Cette phase a uniquement pour but de laisser le temps au boss de s'introduire à vous et vous laissera le temps de repérer en partie la zone de combat.\\

\item La seconde phase est celle où vous pourrez attaquer le boss. Cependant ne croyez pas que ce sera une partie de plaisir, loin de là ! Ce n'est pas un boss pour rien, il vous attaquera également en vous tirant dessus et les plateformes ne suffiront pas à vous sauver. Le seul moyen d'esquiver ses balles sera d'être suffisament réactif pour sauter par dessus. De plus, l'effet des armes habituelles sera relativement faible pour ne pas dire inexistant sur lui. Le seul moyen de le vaincre sera de ramasser l'arme blanche qui apparaitra sur la plateforme située en haut à gauche de la carte, mais là encore des bug appelés par Van'Hithas tenteront de vous bloquer la route.\\

\item La troisième phase mettra d'autres de vos talents à rudes épreuves. En effet, dans cette phase Van'hithas vous montrera sa vraie puissance et fera grossir son arme afin de vous envoyer des rafales de balles impossibles à esquiver sauf en vous cachant derrière les blocs aux début de la carte. Cependant, il vous faudra être attentif car il ne vous attendra pas pour commencer à tirer! De plus le chemin vers l'entrée du niveau ne sera pas des plus aisés puisqu'il sera remplis de pics.\\

\item La dernière phase est la phase de mort du boss. cette phase a pour objectif de mettre un point final à l'histoire du jeu et de vous montrer le dénouement dans une magnifique vidéo.\\
\end{itemize}
Le coeur du combat sera donc une succession des phases 2 et 3 jusqu'à la mort du boss. Cependant ce combat ne pourrait avoir lieu de manière correcte sans un environnement adapté. En effet, de nombreux éléments ont été intégrés de manière à interagir avec les éléments présents sur la carte. Ainsi par exemple, il vous sera nécessaire de vous réfugier à un endroit précis si vous voulez esquivez les tirs de Van'hithas en phase 3, de même, le lieu d'apparition de l'arme blanche n'est pas là par hasard et il vous sera alors nécessaire de terrasser le monstre vert qui surveille ce lieu si vous voulez la récupérer sous peine d'encaisser un montant important de dégats. Nous avons donc créé un environnement particulier afin que le combat puisse se dérouler exactement de cette façon :\\

\begin{figure}[!h]
    \center
    \includegraphics[width=13cm]{antre_boss.PNG}
    \caption{Oserez vous l'affronter ?}
\end{figure}

Maintenant il ne reste plus qu'une question à vous posez: serez vous suffisament téméraire et habile afin de sauver le monde ?

\clearpage

\section {Récit de la réalisation}
\subsection{Nos joies}

\subparagraph{Alexandre}
~~\\

Enfin nous arrivons tous ensemble et en un seul morceau au terme de ce projet d'année ! Que de joies à l'aube de cette fin ! Biensur la joie d'avoir toujours notre équipe avec tous ses membres (on en a pas perdu en route heureusement) soudés et unis et une ambiance super ! Mais aussi, et ce n'est pas négligeable, la joie immense de voir l'accomplissement d'une année de travail et d'obtenir un résultat à la hauteur de nos espérance et je ne pense pas me tromper en disant même qu'il est mieux que ce que nous espérions au début et de loin ! Nous arrivons en quelque sorte au bout de notre aventure et c'est un plaisir de vous présenter notre jeu mais également de le montrer à qui veut bien le voir notre petit bijou. Même dans cette dernière ligne droite nos efforts ne se sont pas relachés et même nous nous sommes dépassés je dirai. Jusqu'à aujourd'hui encore nous avons continué à apprendre de nouvelles choses pour peaufiner notre jeu. Pour ma part par exemple j'ai été chargé des petites vidéos d'introduction au début du jeu que j'ai réalisé avec le soutien de mes camarades à l'aide d'Adobe After Effects qui est un logiciel de création de vidéos que je ne maitrisais absolument pas du tout et j'ai pris beaucoup de plaisir à tester et apprendre à m'en servir. Je ne cite que cet exemple mais il y en a tellement d'autres !    

\subparagraph{Aurélien}
~~\\

Notre aventure se termine et pourtant j'ai l'impression qu'elle a commencé seulement hier. En effet je me suis tellement amusé à coder ce jeu que je n'ai pas vu le temps passer. Et finalement c'est une joie immense que j'éprouve en voyant notre produit fini. De plus, grâce à ce projet, nous avons réussi à former un groupe soudé puisqu'aucun membre du groupe n'est parti, nous étions tous utiles au projet et nous nous entendions tous à merveille. Cependant la plus grande joie que j'éprouve me vient lorsque j'observe le résultat final de notre jeu. En effet, nous avions réussi à obtenir un jeu dont nous étions extrèmement fier puisque nous avons réussi à atteindre nos objectifs et même à les dépasser. Le fait d'avoir réussi à coder entièrement un jeu vidéo me rempli d'une joie immense, si quelqu'un m'aurait dit l'année dernière que nous arriverions à coder entièrement ce jeu, je ne l'aurais probablement pas cru. Et pourtant, grâce à nos connaissances acquises tout au long de l'année et à nos recherches personnelles, nous avons réussi.

\subparagraph{David}
~~\\

J'ai été fier d'être chef de projet de ce groupe de travail. Un groupe de travail qui est resté sérieux, tout le long du développement du jeu, avec une ambiance de travail qui est restée toujours agréable et qui donnait envie de travailler, d'aller de plus en plus loin. Ca a été un plaisir de travailler en groupe, apprenant à travailler les uns avec les autres, à aider les autres quand il le fallait, à être indépendant. Et c'est avec une immense joie qu'on va présenter pour la dernière fois notre jeu vidéo. De plus, j'ai pu développer en passant de la théorie à la pratique, notamment au niveau de la programmation réseau, ou on remarque le vide qui les sépare. Cependant, avant d'entrer à l'EPITA, je n'aurai pas su comment développer un jeu vidéo en entier. C'était un plaisir de voir notre jeu avancer à grand pas durant l'année. Mais le plus passionnant était sûrement le début, car après les grands points passés, ce n'était plus que du "détail".

\subparagraph{Nicolas}
~~\\

Je suis vraiment très heureux d'avoir eu la chance cette année de faire un jeu, ce que j'attendais depuis très longtemps. Mais jamais je n'aurais imaginé au tout début du projet que cette expérience serait si intense et enrichissante. Je n'avais jamais eu une telle expérience de travail de groupe auparavant, tout le monde est resté très soudé du début à la fin et même si le travail à fournir était relativement important, cela c'est toujours fait dans la joie et la bonne humeur. Voir nos efforts récompensés par la version finale qui est vraiment au delà de nos espérances est la cerise sur le gâteau. J'ai pu également apprendre beaucoup de choses en codant ou bien en regardant le code de mes camarades, qui me serviront sans doute beaucoup dans un avenir proche. Plus particulièrement, pour cette soutenance, les énormes ajouts accomplis m'ont vraiment rendu heureux, surtout le fait de voir l'aboutissement du réseau ou encore l'apparition du boss, choses que je n'aurais pas cru possibles de réussir au tout  début du projet et pourtant nous y sommes parvenus ! Franchement, si je suis venu à EPITA au début au lieu d'autres écoles du même type c'était pour ce projet de jeu vidéo et bien après l'avoir enfin terminé, je peux dire que je ne suis pas déçu et que cela va même bien au delà de mes espérances. J'en profite d'ailleurs pour remercier mes camarades  qui m'ont aidé à  réaliser cette fabuleuse expérience qui j'espère n'est que le début d'une longue liste !

\subsection{Nos peines}

\subparagraph{Alexandre}
~~\\

Se dire que c'est la fin de notre projet ça fait quelque chose quand même...Mais cela est largement compensé par le bonheur de voir notre jeu ! Donc pas énormément de peines en soit, comme d'habitude des petites difficultés pour comprendre certains points (After Effects pour ne citer que ça mais également dans du code au niveau du projet) mais à force de travail, de recherches et du soutien de tous les membres du groupe entre eux on s'en sort toujours !

\subparagraph{Aurélien}
~~\\

La plus grande peine que j'éprouve à la fin de se projet c'est justement le fait que ce soit la fin. La fin d'un projet, la fin d'un groupe, la fin d'une aventure. Cependant, je suis tellement fier du résultat final que cette peine s'efface face au bonheur éprouvé. C'est donc sur un sentiment de joie et non de peine que ce projet se termine.

\subparagraph{David}
~~\\

Ma plus grande peine est de finir le travail avec ce groupe, où mon travail de chef de projet se termine. Pour cette dernière soutenance, le plus grand problème aura été Photoshop à prendre pour répondre à nos idées les plus précises et surtout Inno Setup pour comprendre son fonctionnement et résoudre les problèmes qui étaient liés à l'installation. Sans oublier, débugger du code PHP a été un enfer car il n'y aucun débugger pour ce langage malheureusement. \\

 C'est donc avec regret que finir sur ses quelques lignes de rapport, dernière trace de travail pour ce jeu !

\subparagraph{Nicolas}
~~\\

Mes peines .... que puis je dire à part le fait que ce soit déjà la fin ? La fin de ce projet pour lequel nous avons donné notre maximum tout au long de l'année et qui malheureusement se termine. Néanmoins cela n'était que le commencement. Je ne sais pas encore si nous aurons de nouveau, un jour, l'occasion de revivre une si belle expérience, cependant cela m'a montré que la voie que j'avais empruntée était la bonne et je pense que ce n'était que le premier élément d'une longue liste d'expériences que j'aurais à l'EPITA ou bien dans mon futur métier. En dehors de cela, au niveau des difficultés rencontrées pour cette soutenance,  je ne peut pas dire qu'elles aient été nombreuses. En effet, les différents éléments d'XNA ayant été assimilés depuis un moment il m'a seulement fallu résoudre quelques soucis mineurs tels que: comment implémenter le générateur dans le mode multijoueur ou bien encore comment réussir à créer un boss réellement abouti, mais les réflexions avec le groupe m'ont toujours permis de résoudre facilement ces problèmes. Et au final, la joie de voir notre jeu terminé fut tellement immense qu'il serait impossible d'être autre chose que très heureux d'être parvenu jusqu'ici.

\clearpage
\section {Conclusion}

Et voila c'est donc la fin, l'aboutissement de 9 mois de travail auquel nous avons tous pris énormément de plaisir à participer. Au cours de cette année vous avez pu voir les différentes évolutions de Brawl Ultra Guns, évolutions que nous aussi, jour après jour, nous admirions. Nous sommes tous fiers aujourd'hui d'avoir pu vous présenter le résultat final, la concrétisation de toutes les idées que nous avions au début de l'année et que nous imaginions également au fur et à mesure. Vous avez donc pu remarquer toutes les améliorations que nous avons apportées depuis la troisième soutenance, à savoir un mode Histoire totalement fini avec un boss dont il a fallu attendre cette soutenance pour enfin vous le dévoiler, un éditeur totalement terminé, un multijoueur digne des plus grands jeux de plateformes, des options paramétrables et qui s'applique au moindre petit détail. \\

Nous espérons que vous avez pris plaisir, autant que nous, à suivre notre progression dans cette aventure passionante. A l'avenir nos projets ne seront certainement plus des jeux mais ce n'est pas si grave car nous aborderons de nouveaux points qui nous feront progresser dans d'autres parties de ce vaste domaine qu'est l'informatique ! \\

Nous vous donnons donc rendez vous pour de nouvelles aventures dans un futur proche ! A bientôt !


\clearpage

\section {Annexes}


 \end {document} 